package com.itbaizhan;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;

/*通过自启动Servlet实现配置信息的读取
需求：修改文件下载案例，通过自启动Servlet读取配置信息。

当启动tomcat时，自动启动servlet对象，利用全局性ServletContext获取配置的文件路径，将文件路径写活，可以在web.xml中修改
利用servlet的全局性，在servlet中配置 ，其它的servlet可以拿到数据
用ServletContext  <context-param>与 ServletConfig <init-param>*/
public class AutoStartFileDown extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象  已经在容器中实例化，不用我们实化
        ServletContext servletContext = this.getServletContext();
        //获取存放图片的目录名称  利用servlet全局性 在xml文件中获取
        String value = (String) servletContext.getAttribute("path");
        //路径转换  相对路径转为绝对路径  因为下面的File
        // 要绝对路径才能跨平台用（例：linux）
        String readPath = servletContext.getRealPath(value+"/端砚.jpg");
        System.out.println(readPath);
        File file = new File(readPath);
        //将文件放进输入流
        InputStream is = new FileInputStream(file);
        //设置缓存
        byte[] buff = new byte[is.available()];
        is.read(buff);
        //设置响应编码 因为文件名是中文
        resp.setHeader("Content-Disposition","attachment;filename="+new String(file.getName().getBytes("gbk"),"iso-8859-1"));
        OutputStream os = resp.getOutputStream();
        os.write(buff);
        os.flush();
        os.close();

    }
}
